2020.01.11 【ABAP随笔】SM30常见增强操作 | 您所在的位置:网站首页 › sap表格维护生成器 事件 修改日期 › 2020.01.11 【ABAP随笔】SM30常见增强操作 |
1. 自动带出描述类型(更新回数据库) 我们使用的是在SM30中自动带出销售订单类型的描述 首先我们创建一张表和一个维护视图(维护视图的好处就是可以方便增加字段),维护视图中维护标记为R标识字段不可输入 然后需求就是根据填入的销售订单号,去TVAKT中抓取描述,给context字段 我们根据维护视图创建表维护生成器: 函数组名称为ZVJXZHU_FG_01 接着进入到函数组ZVJXZHU_FG_01界面下: 为了防止维护程序的时候出现空的VBELN,所有我们进入到9000屏幕布局页面将VBELN和POSNR设置为必输,双击vbeln列,将input设置为required。 然后代码部分为在9000屏幕的代码下增加:双击创建 PROCESS BEFORE OUTPUT. MODULE LISTE_INITIALISIEREN. LOOP AT EXTRACT WITH CONTROL TCTRL_ZVJXZHU_01 CURSOR NEXTLINE. MODULE LISTE_SHOW_LISTE. ENDLOOP. MODULE mod_set_sort. * PROCESS AFTER INPUT. MODULE LISTE_EXIT_COMMAND AT EXIT-COMMAND. MODULE LISTE_BEFORE_LOOP. LOOP AT EXTRACT. MODULE LISTE_INIT_WORKAREA. CHAIN. FIELD ZVJXZHU_01-VBELN . FIELD ZVJXZHU_01-PONSR . FIELD ZVJXZHU_01-CONTEXT . FIELD ZVJXZHU_01-ID . MODULE SET_UPDATE_FLAG ON CHAIN-REQUEST. ENDCHAIN. FIELD VIM_MARKED MODULE LISTE_MARK_CHECKBOX. CHAIN. FIELD ZVJXZHU_01-VBELN . FIELD ZVJXZHU_01-PONSR . "add Customization requirements MODULE customize_update. "add Customization requirements MODULE LISTE_UPDATE_LISTE. ENDCHAIN. ENDLOOP. MODULE LISTE_AFTER_LOOP. 在include程序中增加代码:(注意这个和下面通过事件写的自动流水号不同,这个自动带入描述时每次都会执行) LZVJXZHU_FG_01I01 MODULE customize_update INPUT. CLEAR gv_auart. IF zvjxzhu_01-vbeln IS NOT INITIAL. SELECT SINGLE auart INTO gv_auart FROM vbak WHERE vbeln = zvjxzhu_01-vbeln. IF sy-subrc EQ 0. SELECT SINGLE bezei INTO zvjxzhu_01-context FROM tvakt WHERE auart = gv_auart AND spras = sy-langu . ELSE."未找到订单 zvjxzhu_01-context = '订单不存在'. ENDIF. ENDIF. ENDMODULE. 我们看下SM30进去维护的效果就是: 我们这里就带出一下订单日期好了。 首先必须在ZTJXZHU_01中给vbeln设置外键:VBAK-VBELN 进入维护视图ZVJXZHU_01点关系: 然后在视图字段上增加字段: 我们重新生成一下表维护生成器(重新生成之后,9000屏幕上的代码会被刷新,所以需要重新加一下代码,要是代码比较多就最好体现备份一下) 效果如下当你输入一个订单时,会自动带出其创建日期,同时因为设置了外键,当你输入VBELN不存在于VBAK时,不允许输入。 我们就以订单类型来举个例子: 进入9000屏幕布局:分别把文本和输入框拖到指定位置(因为我的SAP有语言包确实问题所以暂时命名为1234,到元素清单中可以修改) 在9000屏幕的PBO中增加代码: 执行SM30效果如下图所示: 这个是昨天ABAP群里小伙伴的一个需求,每次增加条目时给条目一个流水号码,当前最大号码+1(有删除先不管) 我们通过表维护生成器事件来实现这个功能 首先我们使用上面定义的ID来作为流水号码,进入视图的表维护生成器界面(点修改进入): 点击事件: 弹出消息,无需理会 点击新条目,然后 我们使用05维护事件,还有其他的维护事件可以使用,大家可以自己去尝试 增加子例程FRM_AUTO_NUM,然后点击编辑器(下图红框),创建form 只有才创建新条目才会调用 FORM frm_auto_num. DATA lt_zvjxzhu TYPE TABLE OF zvjxzhu_01. MOVE-CORRESPONDING total[] TO lt_zvjxzhu. IF lt_zvjxzhu[] IS NOT INITIAL. SORT lt_zvjxzhu BY id DESCENDING.“取ID最大值 READ TABLE lt_zvjxzhu INTO DATA(ls_zvjxzhu) INDEX 1. IF sy-subrc EQ 0. zvjxzhu_01-id = ls_zvjxzhu-id + 1.” ID最大值+1 ENDIF. ELSE. zvjxzhu_01-id = 1. ENDIF. ENDFORM. 这个事件就写好了,在创建新条目的时候,会自动给ID加上流水号码。 |
CopyRight 2018-2019 实验室设备网 版权所有 |